package com.okilo.online.app.tools.manager

import com.okilo.online.app.base.OkiloBaseAct
import com.okilo.online.app.base.app.OkiloActStackManager

/**
 * 系统返回键处理器
 */
class OkiloBackPressHandler(private val activity: OkiloBaseAct) {

    private var isInterceptBack = false
    private var isDoubleBackToExitEnabled = false
    private var exitTips = "Press again to exit the app"
    private var lastBackPressTime: Long = 0
    private var backPressCallback: (() -> Boolean)? = null

    /**
     * 处理返回键按下事件
     * @return 是否已处理（true表示已处理，false表示未处理）
     */
    fun onBackPressed(): Boolean {
        // 优先执行自定义回调
        backPressCallback?.let { callback ->
            if (callback.invoke()) {
                return true
            }
        }

        // 检查是否拦截返回键
        if (isInterceptBack) {
            return true
        }

        // 处理双击退出
        if (isDoubleBackToExitEnabled) {
            return handleDoubleBackToExit()
        }

        return false
    }

    /**
     * 处理返回动作（点击返回按钮时调用）
     */
    fun handleBackAction() {
        if (!isInterceptBack) {
            activity.finish()
        }
    }

    /**
     * 设置返回键拦截
     * @param intercept 是否拦截
     */
    fun setInterceptBack(intercept: Boolean) {
        this.isInterceptBack = intercept
    }

    /**
     * 设置是否启用双击退出
     * @param enabled 是否启用
     */
    fun setDoubleBackToExitEnabled(enabled: Boolean) {
        this.isDoubleBackToExitEnabled = enabled
    }

    /**
     * 设置退出提示信息
     * @param tips 提示文本
     */
    fun setExitTips(tips: String) {
        this.exitTips = tips
    }

    /**
     * 设置自定义返回键回调
     * @param callback 回调函数，返回true表示已处理
     */
    fun setBackPressCallback(callback: () -> Boolean) {
        this.backPressCallback = callback
    }

    /**
     * 处理双击退出逻辑
     * @return 是否已处理
     */
    private fun handleDoubleBackToExit(): Boolean {
        val currentTime = System.currentTimeMillis()

        if (currentTime - lastBackPressTime > 2000) {
            // 第一次点击，显示提示
            activity.showOkiloToast(exitTips)
            lastBackPressTime = currentTime
            return true
        } else {
            // 第二次点击，退出应用
            OkiloActStackManager.finishAllActivity()
            return false
        }
    }
}